package cn.edu.ctbu.sbadmin.common.core;


import cn.edu.ctbu.sbadmin.common.domain.QObject;
import cn.edu.ctbu.sbadmin.common.domain.QueryPagePara;
import cn.edu.ctbu.sbadmin.school.domain.DimClassDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

/**
 * create @ ctbu
 * Description:
 * User: minttang
 * Date: 2019-02-21
 * Time: 16:11
 */
public  interface BaseService<T> extends IService<T> {

    /**
     * 按属性查找,快速查找方式
     *
     * @param AttName
     * @param value
     * @return
     */
    List<T> findByAttrName(String AttName, Object value);


    /**
     * 读取指定属性值的几条数据
     *
     * @param AttName
     * @param value
     * @param n        几第数据
     * @param orderCol 排序字段，只支持一个
     * @param asc      是否升序
     * @return
     */
    IPage<T> findByAttrNameTopN(String AttName, Object value, Integer n, String orderCol, Boolean asc);


    /**
     * 按属性查询，只返回一个
     *
     * @param AttName
     * @param value
     * @return
     */
    T findOneByAttrName(String AttName, Object value);


    /**
     * 按属性查找,返回数据
     *
     * @param AttName
     * @param value
     * @return
     */
    public Integer countByAttrName(String AttName, Object value);


    IPage<T> getByPage(QueryPagePara request);

    public List<T>  getAll();

    /**
     * 第二种分页查询方案，字符串自动like
     * @param queryObj
     * @return
     */
    IPage<T> getPageByObject(QObject<T> queryObj);


    Map<String, Object> getByPage(QueryPagePara request, T entity);

    Map<String, Object> selectByPageNumSize(QueryPagePara request, Supplier<?> s);


    int removeByIds(Long[] ids);

    int removeByIds(Integer[] ids);

    public List<T> getByIds(long[] ids);

    public IPage<T>  list(Map<String, Object> map);


}